package models

import (
	"gorm.io/gorm"
	"sanrenx.com/xyxf/pkg/orm"
)

/**
 * @Description: 新用户
 */
type UserNewbie struct {
	orm.Model
	Phone    string
	Openid   string
	Platform string
}

func (UserNewbie) TableName() string {
	return "user"
}

//用户 信息
type User struct {
	ID        uint64 `gorm:"primarykey" json:"-"`
	Name      string `json:"name"`
	Title     string `json:"title"`
	Gender    int    `json:"gender"`
	AvatarUrl string `json:"avatarUrl"`
	Province  string `json:"province"`
	City      string `json:"city"`

	Coin int `json:"coin"`
	Exp  int `json:"exp"`
	Days int `json:"days"`
}

// 用户信息 详情
type UserDetails struct {
	ID uint64 `gorm:"primarykey" json:"-"`

	Name      string `json:"name"`
	AvatarUrl string `json:"avatarUrl"`

	Title  string `json:"title"`  //称谓
	Gender int    `json:"gender"` //性别

	Province string `json:"province"`
	City     string `json:"city"`

	CreatedAt orm.LocalTime  `json:"createdAt,omitempty"`
	UpdatedAt orm.LocalTime  `json:"updatedAt,omitempty"`
	DeletedAt gorm.DeletedAt `json:"deletedAt,omitempty"`

	//资产
	Val UserVal `gorm:"foreignKey:UserId" json:"val"`
	//修行
	Std UserStd `gorm:"foreignKey:UserId" json:"std"`
}

func (UserDetails) TableName() string {
	return "user"
}

type UserVal struct {
	UserId  uint64 `gorm:"primarykey" json:"-"`
	Level   int64  `json:"level"`    //等级
	Exp     int64  `json:"exp"`      //经验
	ExpLast int64  `json:"exp_last"` //经验值 上次
	Achv    int64  `json:"achv"`     //成就点
	Coin    int64  `json:"coin"`     //佛缘点
	Merit   int64  `json:"merit"`    //功德额
}

func (UserVal) TableName() string {
	return "user_val"
}

type UserStd struct {
	UserId   uint64 `gorm:"primarykey" json:"-"`
	QianDao  int    `json:"QianDao"`  //签到(天)
	ZaoXiang int    `json:"ZaoXiang"` //早香(次)
	WanXiang int    `json:"WanXiang"` //晚香(次)
	YueDu    int    `json:"YueDu"`    //阅读(篇)
	JieYuan  int    `json:"JieYuan"`  //结缘(元)
	SongJing int    `json:"SongJing"` //诵经(遍)
	ChaoJing int    `json:"ChaoJing"` //抄经(字)
	FanYin   int    `json:"FanYin"`   //梵音(秒)
	ChanZuo  int    `json:"ChanZuo"`  //禅坐(秒)
	FaYuan   int    `json:"FaYuan"`   //发愿(次)
	ChanHui  int    `json:"ChanHui"`  //忏悔(次)
	HuiXiang int    `json:"HuiXiang"` //回向(次)
}

func (UserStd) TableName() string {
	return "user_std"
}

/**
 * @Description: 用户行为
 */
type UserAction struct {
	UserID    uint64        `json:"-"`
	OwnerID   uint64        `json:"ownerId"`
	OwnerType string        `json:"ownerType"`
	Remark    string        `json:"remark"`
	CreatedAt orm.LocalTime `json:"created_at"`
}

func (UserAction) TableName() string {
	return "user"
}

type UserDaily struct {
	UserID uint64 `gorm:"primaryKey;autoIncrement:false" json:"-"`
	Ymd    string `gorm:"primaryKey;autoIncrement:false" json:"ymd"`

	QianDao  *orm.LocalTime `json:"QianDao"`  //签到(时间)
	ZaoXiang *orm.LocalTime `json:"ZaoXiang"` //早香(时间)
	WanXiang *orm.LocalTime `json:"WanXiang"` //晚香(时间)
	YueDu    int            `json:"YueDu"`    //阅读(篇)
	JieYuan  int            `json:"JieYuan"`  //结缘(元)
	SongJing int            `json:"SongJing"` //诵经(遍)
	ChaoJing int            `json:"ChaoJing"` //抄经(字)
	FanYin   int            `json:"FanYin"`   //梵音(秒)
	ChanZuo  int            `json:"ChanZuo"`  //禅坐(秒)
	FaYuan   int            `json:"FaYuan"`   //发愿(次)
	ChanHui  int            `json:"ChanHui"`  //忏悔(次)
	HuiXiang int            `json:"HuiXiang"` //回向(次)
}

type UserValLog struct {
	ID        uint64        `gorm:"primarykey" json:"-"`
	UserID    uint64        `gorm:"index" json:"-"`
	Mode      string        `json:"mode"`
	Value     int           `json:"value"`
	Owner     string        `json:"owner"`
	OwnerType string        `json:"owner_type"`
	Remark    string        `json:"remark"`
	CreatedAt orm.LocalTime `json:"created_at"`
}

func (UserValLog) TableName() string {
	return "user_val_log"
}

type UserStdLog struct {
	ID        uint64        `gorm:"primarykey" json:"-"`
	UserID    uint64        `gorm:"index" json:"-"`
	Mode      string        `json:"mode"`
	Value     string        `json:"value"`
	Remark    string        `json:"remark"`
	CreatedAt orm.LocalTime `json:"created_at"`
}

func (UserStdLog) TableName() string {
	return "user_std_log"
}
